/**
 * 爬取结果数据模型
 */

const mongoose = require('mongoose');
const dbConfig = require('../config');

// 定义爬取结果的 Schema
const crawlResultSchema = new mongoose.Schema({
    // 任务名称
    taskName: {
        type: String,
        required: true,
        index: true
    },
    
    // 爬取是否成功
    success: {
        type: Boolean,
        required: true,
        default: false,
        index: true
    },
    
    // 目标 URL
    url: {
        type: String,
        required: false
    },
    
    // 页面标题
    title: {
        type: String,
        required: false
    },
    
    // 爬取的数据（灵活存储，可以是任何结构）
    data: {
        type: mongoose.Schema.Types.Mixed,
        required: false
    },
    
    // 错误信息（如果爬取失败）
    error: {
        type: String,
        required: false
    },
    
    // 爬取时间戳
    crawlTimestamp: {
        type: Date,
        required: false
    },
    
    // 记录创建时间
    createdAt: {
        type: Date,
        default: Date.now,
        index: true
    },
    
    // 记录更新时间
    updatedAt: {
        type: Date,
        default: Date.now
    },
    
    // 执行批次 ID（用于标识同一批次执行的任务）
    batchId: {
        type: String,
        required: false,
        index: true
    },
    
    // 执行模式（parallel/sequential/concurrent）
    executionMode: {
        type: String,
        enum: ['parallel', 'sequential', 'concurrent','custom'],
        required: false
    },
    
    // 搜索关键字（如果是搜索任务）
    searchKeyword: {
        type: String,
        required: false,
        index: true
    },
    
    // 额外的元数据
    metadata: {
        type: mongoose.Schema.Types.Mixed,
        required: false
    }
}, {
    // 自动管理 createdAt 和 updatedAt
    timestamps: true,
    
    // 集合名称
    collection: dbConfig.collections.crawlResults
});

// 创建索引
crawlResultSchema.index({ taskName: 1, createdAt: -1 });
crawlResultSchema.index({ success: 1, createdAt: -1 });
crawlResultSchema.index({ batchId: 1, createdAt: -1 });
crawlResultSchema.index({ searchKeyword: 1, createdAt: -1 });

// 创建模型
const CrawlResult = mongoose.model('CrawlResult', crawlResultSchema);

module.exports = CrawlResult;

